# -*- coding: utf-8 -*-
import nltk,tkFileDialog
from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktParameters
from Tkinter import *
items = ''
#C'est le GUI du projet.
class mywidgets:

    def __init__(self,root):

        root.geometry("500x600")
        self.sentenceLabel = Label(root, text="Choix de phrases prédéfinies:").pack()
        self.sentenceLb = Listbox(root,width=70, height=7)
        self.sentenceLb.insert(1, "Alain a ete retrouve avec une bobepine.")
        self.sentenceLb.insert(2, "Levis etait a Moscou a 17 heures.")
        self.sentenceLb.insert(3, "Le plan nord a ete vole a 22 heures.")
        self.sentenceLb.insert(4, "Adile etait a new-york avec un marteau-piqueur a 23 heures.")
        self.sentenceLb.insert(5, "Tony a effectue un seul vol durant sa journee.")
        self.sentenceLb.insert(6, "Un seul vol a ete effectue par Tony durant sa journee.")
        self.sentenceLb.insert(7, "Alain, qui etait a Moscou a dix-sept heures, a ete retrouve avec une bobepine.")
        self.sentenceLb.insert(8, "Une bobepine a ete apercue sur les lieux du crime.")
        self.sentenceLb.insert(9, "Tony a effectue le vol Montreal/San-Francisco a six heures.")
        self.sentenceLb.insert(10, "Alain a ete retrouve avec une bobepine. Il etait a Moscou a 17 heures.")
        self.sentenceLb.insert(11, "Bourque a ete retrouve avec une pince a cheveux. Il a effectue un seul vol durant sa journee.")
        self.sentenceLb.insert(12, "Theriault etait a Athenes avec un singe acrobate a 23 heures.")
        self.sentenceLb.select_set(0)
        self.sentenceLb.pack()
        self.frame=Frame(root)

        #define a new frame and put a text area in it
        textfr=Frame(self.frame)
        self.text=Text(textfr,height=10,width=50,background='white')
        #put a scroll bar in the frame
        scroll=Scrollbar(textfr)
        self.text.configure(yscrollcommand=scroll.set)
        #pack everything
        self.text.pack(side=LEFT)
        scroll.pack(side=RIGHT,fill=Y)
        textfr.pack(side=TOP)          
            
        self.bLb = Button(root, text="Choisir", command=self.__selection, anchor='s').pack()
        self.label1 = Label(root, text="Entrez un texte ou choisissez-le à partir du listBox:").pack()
        self.previewJessText=Text(root,height=10,width=50,background='white')#state=DISABLED
        self.frame.pack()
            
        self.b = Button(root, text="Traiter", command=self.__callback, anchor='s').pack()
        self.label2 = Label(root, text="Aperçu du contenu du fichier .clp qui sera écrit:").pack()
        self.previewJessText.pack()
        self.writeBtn = Button(root, text="Écrire", command=self.__askdirectory, anchor='s').pack()  
                        
    def __selection(self):
        items = map(int, self.sentenceLb.curselection())
        print self.sentenceLb.get(items[0])
        self.text.insert(END, ' '+self.sentenceLb.get(items[0]))  
            
    def __askdirectory(self):
        directoryTxt= tkFileDialog.askdirectory(parent=root,initialdir="/",title='Please select a directory')
        fo = open(directoryTxt+'\\test.clp', "wb")
        fo.write(self.previewJessText.get(1.0, END))
        fo.close()
        
    def __callback(self):
        textInput=self.text.get(1.0, END)
        dernierSuspect = ''
        #remplacement des pronoms Il/elle par le dernier nom de notre banque de nom
        wordArray=textInput.replace(',','').split(' ')
        suspectListe=['adile','alain','levis','pierre','tony', 'benmahsou', 'april', 'theriault', 'bourque', 'rivard']
        pronounList=['il','elle','qui']
        for index,word in enumerate(wordArray):
                        if word.lower() in suspectListe:
                                dernierSuspect = word
                        if word.lower() in pronounList:
                                if dernierSuspect!='':
                                        if word.lower()=='qui':
                                            dernierSuspect = dernierSuspect + 'qui'
                                        wordArray[index] = dernierSuspect
        textInput=' '.join(wordArray)
        punkt_param = PunktParameters()
        punkt_param.abbrev_types = set(['dr', 'vs', 'mr', 'mrs', 'prof', 'inc']) #remplacer les abréviations possibles 
        sentence_splitter = PunktSentenceTokenizer(punkt_param)
        inputs = sentence_splitter.tokenize(textInput)
        for aSentence in inputs:
            #les phrases ne devraient pas finir par des points pour le traitement.
            #elles doivent être sous forme d'array pour le nltk batch interpret
            sentArray=[aSentence.replace('.','').replace('/',' ').replace('\'','')]
            for allresults in nltk.batch_interpret([x.lower() for x in sentArray], 'file:grammaire.fcfg'):
                 for (synrep, semrep) in allresults: 
                                        if str(semrep).find('&')==-1:
                                                self.previewJessText.insert(END, 'assert( '+ str(semrep) +')\n' )
                                        else:
                                                self.previewJessText.insert(END, 'assert( '+ str(semrep)[1:][:-1].replace('&',')\nassert(') +')\n' )
                                        #synrep.draw()
                
#Création de l'interface (donc, ici c'est la fonction "main")                        
root = Tk()
root.resizable(width=FALSE, height=FALSE)
s=mywidgets(root)
root.title('Menu d\' entrée')
root.mainloop()